package org.jeecg.modules.demo;
import java.io.File;

/**
 * 微信支付配置类（与修复后的服务类配套）
 * 存储微信支付所需的所有配置参数，确保证书文件正确传递
 */
public class WechatPayConfig {
    // 公众号/小程序AppID
    private final String appid;

    // 公众号/小程序AppSecret
    private final String appsecret;

    // 商户号（mchid）
    private final String mchId;

    // 商户证书序列号（mchserialno）
    private final String mchSerialNo;

    // APIv3密钥（apiv3key）
    private final String apiV3Key;

    // 商户证书文件（apiclient_cert.pem）
    private final File certFile;

    // 商户私钥文件（apiclient_key.pem）
    private final File privateKeyFile;

    // 支付结果通知地址（必须为HTTPS）
    private final String notifyUrl;

    /**
     * 构造方法，初始化所有配置参数
     * @param appid 公众号/小程序AppID
     * @param appsecret 公众号/小程序AppSecret
     * @param mchId 商户号
     * @param mchSerialNo 商户证书序列号
     * @param apiV3Key APIv3密钥
     * @param certFile 商户证书文件（PEM格式）
     * @param privateKeyFile 商户私钥文件（PEM格式）
     * @param notifyUrl 支付结果通知地址
     */
    public WechatPayConfig(String appid, String appsecret, String mchId, String mchSerialNo,
                           String apiV3Key, File certFile, File privateKeyFile, String notifyUrl) {
        // 验证必要参数非空
        validateParameter(appid, "appid");
        validateParameter(mchId, "mchId");
        validateParameter(mchSerialNo, "mchSerialNo");
        validateParameter(apiV3Key, "apiV3Key");
        validateFile(certFile, "certFile");
        validateFile(privateKeyFile, "privateKeyFile");
        validateParameter(notifyUrl, "notifyUrl");

        this.appid = appid;
        this.appsecret = appsecret;
        this.mchId = mchId;
        this.mchSerialNo = mchSerialNo;
        this.apiV3Key = apiV3Key;
        this.certFile = certFile;
        this.privateKeyFile = privateKeyFile;
        this.notifyUrl = notifyUrl;
    }

    /**
     * 验证参数非空
     */
    private void validateParameter(String param, String paramName) {
        if (param == null || param.trim().isEmpty()) {
            throw new IllegalArgumentException(paramName + " 不能为空");
        }
    }

    /**
     * 验证文件存在且可读取
     */
    private void validateFile(File file, String fileName) {
        if (file == null) {
            throw new IllegalArgumentException(fileName + " 文件对象不能为空");
        }
        if (!file.exists()) {
            throw new IllegalArgumentException(fileName + " 文件不存在: " + file.getAbsolutePath());
        }
        if (!file.canRead()) {
            throw new IllegalArgumentException(fileName + " 文件不可读取: " + file.getAbsolutePath());
        }
    }

    // 所有属性的getter方法（确保与服务类调用对应）
    public String getAppid() {
        return appid;
    }

    public String getAppsecret() {
        return appsecret;
    }

    public String getMchId() {
        return mchId;
    }

    public String getMchSerialNo() {
        return mchSerialNo;
    }

    public String getApiV3Key() {
        return apiV3Key;
    }

    public File getCertFile() {
        return certFile;
    }

    public File getPrivateKeyFile() {
        return privateKeyFile;
    }

    public String getNotifyUrl() {
        return notifyUrl;
    }
}
